#ifndef __ITEM_H__
#define __ITEM_H__

class PacketDecoder;

typedef Int32 ItemId;
#pragma pack(1)

struct ItemCSVInfo
{
	Int32			id;
	Int32			type;
	std::string		name;
	std::string		description;
	Int32			icon_id;
	Int32			overlap_count;
	Int32			require_level;
	Int32			require_race;
	Int32			require_gender;

	Int32			atlas_material_0;
	Int32			atlas_material_1;
	Int32			atlas_material_2;
	Int32			atlas_compose_equip;

	Int32			equip_type;
	Int32			equip_image_id;
	Int32			equip_hp_max;
	Int32			equip_hp_min;
	Int32			equip_ap_max;
	Int32			equip_ap_min;
	Int32			equip_dp_max;
	Int32			equip_dp_min;
	Int32			equip_sp_max;
	Int32			equip_sp_min;

	Int32			equip_enhanceHL_max;
	Int32			equip_enhanceHL_min;
	Int32			equip_enhanceBD_max;
	Int32			equip_enhanceBD_min;
	Int32			equip_enhanceHS_max;
	Int32			equip_enhanceHS_min;

	Int32			equip_resistHL_max;
	Int32			equip_resistHL_min;
	Int32			equip_resistBD_max;
	Int32			equip_resistBD_min;
	Int32			equip_resistHS_max;
	Int32			equip_resistHS_min;

	Int32			equip_prop_BJ_max;
	Int32			equip_prop_BJ_min;
	Int32			equip_prop_SB_max;
	Int32			equip_prop_SB_min;
	Int32			equip_prop_FJ_max;
	Int32			equip_prop_FJ_min;
	Int32			equip_prop_LJ_max;
	Int32			equip_prop_LJ_min;

	ItemCSVInfo()
	{
		id = 0;
		type = 0;
		name = "";
		description = "";
		icon_id = 0;
		overlap_count = 0;
		require_level = 0;
		require_race = 0;
		require_gender = 0;

		atlas_material_0 = 0;
		atlas_material_1 = 0;
		atlas_material_2 = 0;
		atlas_compose_equip = 0;

		equip_type = 0;
		equip_image_id = 0;
		equip_hp_max = 0;
		equip_hp_min = 0;
		equip_ap_max = 0;
		equip_ap_min = 0;
		equip_dp_max = 0;
		equip_dp_min = 0;
		equip_sp_max = 0;
		equip_sp_min = 0;

		equip_enhanceHL_max = 0;
		equip_enhanceHL_min = 0;
		equip_enhanceBD_max = 0;
		equip_enhanceBD_min = 0;
		equip_enhanceHS_max = 0;
		equip_enhanceHS_min = 0;

		equip_resistHL_max = 0;
		equip_resistHL_min = 0;
		equip_resistBD_max = 0;
		equip_resistBD_min = 0;
		equip_resistHS_max = 0;
		equip_resistHS_min = 0;

		equip_prop_BJ_max = 0;
		equip_prop_BJ_min = 0;
		equip_prop_SB_max = 0;
		equip_prop_SB_min = 0;
		equip_prop_FJ_max = 0;
		equip_prop_FJ_min = 0;
		equip_prop_LJ_max = 0;
		equip_prop_LJ_min = 0;
	}
};
class Item
{

public:
	Item();
	Item(ItemId nItemId);
	virtual ~Item();
	void SetItmeId(ItemId nItemId){m_nItemId = nItemId;};
	ItemId GetItemId(){ return m_nItemId;};
	void SetItemInfo(ItemInfo& info);
	ItemInfo& GetItemInfo(){return m_stItemInfo;}
	void SetItemCSVInfo(ItemCSVInfo* pCSVInfo);
	ItemCSVInfo* GetItemCSVInfo(){return m_pItemCSVInfo;}
	void encodeItem(PacketEncoder& encoder);
	static void encodeItemData(ItemInfo& info,PacketEncoder& encoder);
private:
	ItemId			m_nItemId;
	ItemInfo		m_stItemInfo;
	ItemCSVInfo*    m_pItemCSVInfo;
};
#pragma pack()
#endif